﻿Imports System.Data.SqlClient
Imports System.Xml
Imports System.Drawing
Imports DevExpress.XtraReports.UI

Public Class frmNuevoCredito
    Public MaxIDpp As Integer = 0
    Public MaxIdDPP As Integer = 0
    Public esNuevo As Boolean = True
    Public PrimaPorcent As Boolean = False
    Public Primita As Double
    Private Sub btnBuscarCliente_Click(sender As Object, e As EventArgs) Handles btnBuscarCliente.Click
        BuscarClienteMonica()
    End Sub

    Private Sub BuscarClienteMonica()
        If Me.txtCodigoCliente.Text <> Nothing Then
            Try
                If varConexionMon.State = ConnectionState.Open Then
                    varConexionMon.Close()
                End If
                varConexionMon.Open()

                Dim sql As String = String.Format("SELECT codigo_clte, nombre_clte, telefono1, telefono2, e_mail1, direccion1, direccion2 FROM clientes WHERE codigo_clte = '{0}'", Me.txtCodigoCliente.Text)
                Dim cmd As New SqlCommand(sql, varConexionMon)
                Dim reader As SqlDataReader = cmd.ExecuteReader

                If reader.Read Then
                    Me.txtNombre.Text = Trim(reader.Item("nombre_clte").ToString)
                    Me.txtTelefono.Text = Trim(reader.Item("telefono1").ToString)
                    Me.txtCelular.Text = Trim(reader.Item("telefono2").ToString)
                    Me.txtEmail.Text = Trim(reader.Item("e_mail1").ToString)
                    Me.txtDireccion.Text = Trim(reader.Item("direccion1").ToString)
                    Me.txtDireccion.Text += RTrim(" " + reader.Item("direccion2").ToString)
                    Me.gboDatosFinanciamient.Enabled = True
                Else
                    MessageBox.Show("No se ha encontrado ningún cliente con este código", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.txtNombre.Text = Nothing
                    Me.txtTelefono.Text = Nothing
                    Me.txtCelular.Text = Nothing
                    Me.txtEmail.Text = Nothing
                    Me.txtDireccion.Text = Nothing
                    Me.gboDatosFinanciamient.Enabled = False
                End If

                varConexionMon.Close()

                If Me.txtCodigoCliente.Text = "200" Then
                    Me.txtNombre.ReadOnly = False
                    Me.txtTelefono.ReadOnly = False
                    Me.txtCelular.ReadOnly = False
                    Me.txtEmail.ReadOnly = False
                    Me.txtDireccion.Properties.ReadOnly = False
                Else
                    Me.txtNombre.ReadOnly = True
                    Me.txtTelefono.ReadOnly = True
                    Me.txtCelular.ReadOnly = True
                    Me.txtEmail.ReadOnly = True
                    Me.txtDireccion.Properties.ReadOnly = True
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        Else
            Me.txtCodigoCliente.BackColor = Color.LemonChiffon
            MessageBox.Show("Ingrese un código de cliente!", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.txtCodigoCliente.Focus()
        End If
    End Sub

    Private Sub frmNuevoCredito_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'MEGASTOREDataSet.Vendedores' Puede moverla o quitarla según sea necesario.
        Me.VendedoresTableAdapter.Fill(Me.MEGASTOREDataSet.Vendedores)
        'TODO: esta línea de código carga datos en la tabla 'MEGASTOREDataSet.OficialCredito' Puede moverla o quitarla según sea necesario.
        Me.OficialCreditoTableAdapter.Fill(Me.MEGASTOREDataSet.OficialCredito)
        'TODO: esta línea de código carga datos en la tabla 'MEGASTOREDataSet.Clientes' Puede moverla o quitarla según sea necesario.
        Me.ClientesTableAdapter.Fill(Me.MEGASTOREDataSet.Clientes)
        'TODO: esta línea de código carga datos en la tabla 'MEGASTOREDataSet.TipoFinanciamiento' Puede moverla o quitarla según sea necesario.
        Me.TipoFinanciamientoTableAdapter.Fill(Me.MEGASTOREDataSet.TipoFinanciamiento)

        Me.rdbMensual.Checked = True

        Me.dtpFechaOtorgado.EditValue = Date.Now.Date

        Me.dtpPagoPrima.EditValue = Date.Now.Date
    End Sub

    Private Sub txtCodigoCliente_KeyDown(sender As Object, e As KeyEventArgs) Handles txtCodigoCliente.KeyDown
        If e.KeyCode = Keys.Enter Then
            BuscarClienteMonica()
        End If
    End Sub

    Private Sub btnCalcularFinanciamiento_Click(sender As Object, e As EventArgs) Handles btnCalcularFinanciamiento.Click
        If Me.cboTipoFinanciamiento.Text <> "[Vacío]" And Me.txtValorFinanciamiento.Text <> Nothing And Me.txtNumCuotas.Text <> Nothing And Me.txtTasaInteres.Text <> Nothing Then
            If Me.txtPrima.Text <> Nothing Or Me.txtPorcentajePrima.Text <> Nothing Then
                RealizarCalculos()
            Else
                Me.txtPorcentajePrima.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese el porcentaje de la prima", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtPorcentajePrima.Focus()
            End If
        Else
            If Me.cboTipoFinanciamiento.Text = "[Vacío]" Then
                MessageBox.Show("Seleccione el tipo de financiamiento", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.cboTipoFinanciamiento.Focus()
                Me.cboTipoFinanciamiento.ShowPopup()
            ElseIf Me.txtValorFinanciamiento.Text = Nothing Then
                Me.txtValorFinanciamiento.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese el valor a financiar", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtValorFinanciamiento.Focus()
            ElseIf Me.txtNumCuotas.Text = Nothing Then
                Me.txtNumCuotas.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese el número de cuotas", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtNumCuotas.Focus()
            ElseIf Me.txtTasaInteres.Text = Nothing Then
                Me.txtTasaInteres.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese la tasa de interés", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtTasaInteres.Focus()
            End If
        End If
    End Sub

    Private Sub txtValorFinanciamiento_EditValueChanged(sender As Object, e As EventArgs) Handles txtValorFinanciamiento.EditValueChanged
        Me.txtValorFinanciamiento.BackColor = Color.White
    End Sub

    Private Sub txtPorcentajePrima_EditValueChanged(sender As Object, e As EventArgs) Handles txtPorcentajePrima.EditValueChanged
        Me.txtPorcentajePrima.BackColor = Color.White
    End Sub

    Private Sub txtNumCuotas_EditValueChanged(sender As Object, e As EventArgs) Handles txtNumCuotas.EditValueChanged
        Me.txtNumCuotas.BackColor = Color.White
    End Sub

    Private Sub txtTasaInteres_EditValueChanged(sender As Object, e As EventArgs) Handles txtTasaInteres.EditValueChanged
        Me.txtTasaInteres.BackColor = Color.White
    End Sub

    Private Sub RealizarCalculos()
        Dim Prima, ValorFinanciar, Intereses, TotalPagar, CuotaMensual, InteresMensual, CapitalMensual, TotalPagar2 As Double
        Dim ProMes As Integer = 1
        Dim Saldo As Double
        Dim FechaPago As Date = Me.dtpFechaOtorgado.DateTime.Date
        Dim FechaImprimir As Date = Me.dtpFechaOtorgado.DateTime.Date
        Dim Plazo As Integer = Me.txtNumCuotas.EditValue

        If PrimaPorcent = True Then
            Prima = Me.txtValorFinanciamiento.EditValue * Me.txtPorcentajePrima.EditValue
            Primita = Me.txtPorcentajePrima.EditValue
        Else
            Prima = Me.txtPrima.EditValue
            Me.txtPorcentajePrima.Text = (Prima / Me.txtValorFinanciamiento.EditValue)
            Primita = (Prima / Me.txtValorFinanciamiento.EditValue)
        End If

        ValorFinanciar = Me.txtValorFinanciamiento.EditValue - Prima
        Intereses = ValorFinanciar * (Me.txtTasaInteres.EditValue * Me.txtNumCuotas.EditValue)
        TotalPagar = ValorFinanciar + Intereses
        TotalPagar2 = ValorFinanciar + Intereses + Prima
        CuotaMensual = TotalPagar / Me.txtNumCuotas.EditValue

        InteresMensual = Intereses / Plazo
        CapitalMensual = ValorFinanciar / Plazo
        Saldo = TotalPagar

        Me.txtPrima.EditValue = Prima
        Me.txtValorFinanciar.EditValue = ValorFinanciar
        Me.txtIntereses.EditValue = Intereses
        Me.txtCuotaMensual.EditValue = CuotaMensual
        Me.txtTotalPagar.EditValue = TotalPagar2

        Me.gboAmortizacion.Enabled = True

        Me.dgvAmortizacion.Rows.Clear()

        While (ProMes <= Plazo)
            If Saldo < CuotaMensual Then
                CuotaMensual = Saldo
            End If

            Saldo -= CuotaMensual
            If Me.rdbMensual.Checked = True Then
                FechaPago = FechaPago.AddMonths(1)
            ElseIf Me.rdbQuincenal.Checked = True Then
                FechaPago = FechaPago.AddDays(15)
            Else
                FechaPago = FechaPago.AddMonths(1)
            End If

            FechaImprimir = FechaPago
            If FechaImprimir.DayOfWeek = DayOfWeek.Sunday Then
                FechaImprimir = FechaImprimir.AddDays(1)
            End If
            Me.dgvAmortizacion.Rows.Add(ProMes, FormatCurrency(InteresMensual), FormatCurrency(CapitalMensual), FormatCurrency(CuotaMensual), FormatCurrency(Saldo), FormatDateTime(FechaImprimir, DateFormat.LongDate))

            ProMes += 1
        End While

        Me.btnGuardar.Enabled = True
    End Sub

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        If Me.cboAutoriza.Text <> "[Vacío]" Then
            If ValidarFacturaExistente() = False Or esNuevo = False Then
                Dim respuesta As String

                respuesta = MessageBox.Show(String.Format("Este crédito se calculó con una tasa de {0} {1} ¿Desea continuar?", Me.txtTasaInteres.Text, vbLf), varTitulo, MessageBoxButtons.YesNo, MessageBoxIcon.Question)

                If respuesta = vbYes Then
                    GuardarCliente()
                End If
            Else
                MessageBox.Show("¡Esta Factura ya se ha ingresado, Intente con otra!", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Else
            MessageBox.Show("Seleccione el oficial de crédito que autoriza", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.cboAutoriza.Focus()
            Me.cboAutoriza.ShowPopup()
        End If
    End Sub

    Private Function ValidarFacturaExistente()
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If

            varConexionMegaStore.Open()
            Dim sqlValidacion As String = String.Format("SELECT COUNT(*) AS Total FROM PlanPago WHERE NumFactura = '{0}'", Me.txtNumFactura.EditValue)
            Dim cmdValidacion As New SqlCommand(sqlValidacion, varConexionMegaStore)
            Dim reader As SqlDataReader = cmdValidacion.ExecuteReader

            If reader.Read Then
                If reader.Item("Total") < 1 Then
                    Return False
                Else
                    Return True
                End If
            Else
                Return True
            End If

            reader.Close()
            varConexionMegaStore.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Function

    Private Sub GuardarCliente()
        If VerificarExisteCliente() = False Then
            'Aqui vamos a escribir todo el código para guardar al cliente en la db
            Me.ClientesTableAdapter.InsertarCliente(Me.txtCodigoCliente.EditValue, Me.txtNombre.Text, Me.txtTelefono.Text, Me.txtCelular.Text, Me.txtEmail.Text)
        End If
        GuardarPlanPago()
    End Sub

    Private Function VerificarExisteCliente()
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If
            varConexionMegaStore.Open()

            Dim sql As String = String.Format("SELECT COUNT(*) AS Total FROM Clientes WHERE CodCliente ='{0}'", Me.txtCodigoCliente.EditValue)
            Dim cmd As New SqlCommand(sql, varConexionMegaStore)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            If reader.Read Then
                If reader.Item("Total") >= 1 Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return True
            End If
            varConexionMegaStore.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return True

    End Function

    Private Sub GuardarPlanPago()
        Try
            Dim MaxIdPlanPago As Integer
            Dim MaxIdDetallePlanpago As Integer
            If esNuevo = True Then
                Me.PlanPagoTableAdapter.InsertarPlanPago(Me.txtCodigoCliente.Text, Me.dtpFechaOtorgado.EditValue, Me.cboTipoFinanciamiento.EditValue,
                                                         Me.txtValorFinanciamiento.Text, Primita, Me.txtPrima.Text,
                                                         Me.txtValorFinanciar.Text, Me.txtNumCuotas.Text, Me.txtTasaInteres.EditValue, Me.txtIntereses.Text,
                                                         Me.txtCuotaMensual.Text, Me.txtObservaciones.Text, Me.cboAutoriza.EditValue, Me.txtNumFactura.EditValue, Me.dtpPagoPrima.EditValue, Me.cboVendedores.EditValue)
                esNuevo = False
                MaxIdPlanPago = ObtenerIdPlanPago()
            Else
                Me.PlanPagoTableAdapter.ActualizarPlanPago(Me.txtCodigoCliente.Text, Me.dtpFechaOtorgado.EditValue, Me.cboTipoFinanciamiento.EditValue,
                                                         Me.txtValorFinanciamiento.Text, Primita, Me.txtPrima.Text,
                                                         Me.txtValorFinanciar.Text, Me.txtNumCuotas.Text, Me.txtTasaInteres.EditValue, Me.txtIntereses.Text,
                                                         Me.txtCuotaMensual.Text, Me.txtObservaciones.Text, Me.cboAutoriza.EditValue, Me.txtNumFactura.Text, MaxIDpp, Me.dtpPagoPrima.EditValue, Me.cboVendedores.EditValue)
                MaxIdPlanPago = MaxIDpp
            End If

            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If


            Dim NumCuota As Integer
            Dim Intereses, Capital, CuotaMensual, Saldo As Double
            Dim PrimerSaldo As Double = Me.txtValorFinanciar.EditValue + Me.txtIntereses.EditValue
            Dim FechaPago1 As Date

            Me.DetallePlanPagoTableAdapter.EliminarTodosDetallesXPlan(MaxIdPlanPago)

            Me.DetallePlanPagoTableAdapter.InsertarDetallePlanPago(MaxIdPlanPago, 0, 0, Me.txtPrima.Text, Me.txtPrima.Text, PrimerSaldo, Me.dtpPagoPrima.EditValue)
            MaxIdDetallePlanpago = ObtenerIdDetallePlanPago()

            If Me.dtpPagoPrima.EditValue = Me.dtpFechaOtorgado.EditValue Then
                Me.DetallePlanPagoTableAdapter.SP_GuardarPagoNormal(Me.dtpPagoPrima.EditValue, Me.txtPrima.Text, MaxIdDetallePlanpago)
            End If

            For Each fila As DataGridViewRow In dgvAmortizacion.Rows
                NumCuota = fila.Cells(0).Value
                Intereses = fila.Cells(1).Value
                Capital = fila.Cells(2).Value
                CuotaMensual = fila.Cells(3).Value
                Saldo = fila.Cells(4).Value
                FechaPago1 = fila.Cells(5).Value

                If NumCuota > 0 Then
                    Me.DetallePlanPagoTableAdapter.InsertarDetallePlanPago(MaxIdPlanPago, NumCuota, Intereses, Capital,
                                                                           CuotaMensual, Saldo, FechaPago1)
                End If
            Next

            MessageBox.Show("Se ha guardado correctamente los datos de este crédito", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.btnImprimir.Enabled = True
            Me.btnGuardar.Enabled = False
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Function ObtenerIdPlanPago() As Integer
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If
            varConexionMegaStore.Open()

            Dim sql As String = "SELECT MAX(IdPlanPago) AS MaxID FROM PlanPago"
            Dim cmd As New SqlCommand(sql, varConexionMegaStore)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            If reader.Read Then
                MaxIDpp = reader.Item("MaxID").ToString
            End If

            reader.Close()
            varConexionMegaStore.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return MaxIDpp

    End Function

    Private Function ObtenerIdDetallePlanPago() As Integer
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If
            varConexionMegaStore.Open()

            Dim sql As String = "SELECT MAX(IdDetallePlanPago) AS MaxID FROM DetallePlanPago"
            Dim cmd As New SqlCommand(sql, varConexionMegaStore)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            If reader.Read Then
                MaxIdDPP = reader.Item("MaxID").ToString
            End If

            reader.Close()
            varConexionMegaStore.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return MaxIdDPP

    End Function

    Private Sub btnImprimir_Click(sender As Object, e As EventArgs) Handles btnImprimir.Click
        Dim reporte As New rptNuevoPlanPago() With {.IDx = MaxIDpp}
        reporte.generarReporte()
        Dim printTool As New ReportPrintTool(reporte)
        printTool.Report.CreateDocument(False)
        printTool.ShowRibbonPreviewDialog()
        'reporte.ShowRibbonPreviewDialog()
    End Sub

    Private Sub txtPrima_KeyDown(sender As Object, e As KeyEventArgs) Handles txtPrima.KeyDown
        PrimaPorcent = False
        Me.txtPorcentajePrima.EditValue = Nothing
    End Sub

    Private Sub txtPorcentajePrima_KeyDown(sender As Object, e As KeyEventArgs) Handles txtPorcentajePrima.KeyDown
        PrimaPorcent = True
        Me.txtPrima.EditValue = Nothing
    End Sub

    Private Sub txtNumFactura_EditValueChanged(sender As Object, e As EventArgs) Handles txtNumFactura.EditValueChanged
        Me.btnGuardar.Enabled = True
    End Sub
End Class